package modelo.moviles.naves;

import modelo.*;
import modelo.armas.Arsenal;
import modelo.moviles.exceptions.ArsenalSinArmas;
import modelo.moviles.balas.Bala;

public abstract class NaveArmada extends Nave {

	protected Arsenal arsenal;

	public NaveArmada(Nivel nuevoNivel){
		super(nuevoNivel);
		this.setArsenal(new Arsenal());
	}


	/* "Agregamos mas armas a la nave" */
	public void agregarArsenal (Arsenal nuevoArsenal){
		Arsenal aux = new Arsenal();
		
		try{
			
			while (nuevoArsenal.tieneArmas()){
				aux.agregarArma(nuevoArsenal.descartarArma());
			}
			while (aux.tieneArmas()){
				arsenal.agregarArma(aux.descartarArma());
			}
		}catch (ArsenalSinArmas e){
			System.err.println(e.getDetalle());
		}
	}
	
	/*	"Al disparar le pide a su arma o arsenal que dispare" */
	public Bala disparar()  throws ArsenalSinArmas{
		Bala bala;
		try {
			bala = arsenal.disparar();
			bala.setPosicion(new Posicion(this.getFila() + 10, getColumna()));
			return bala;
		} catch (ArsenalSinArmas e){
			throw e;
		}
	}
	

	public Arsenal getArsenal(){
		return arsenal;
	}

	/*	"Mueve y en caso requerido dispara" */
	public void vivir(){
		super.vivir();
		if ( 1 == ((int)  Math.floor(Math.random()  * 20))){
			if (this.puedeDisparar()){
				try{
					this.disparar();
				}catch (ArsenalSinArmas e){
					System.err.println(e.getDetalle());
				}
			}
		}
	}

	/* "Vemos si tiene algun arma preparada para disparar" */
	public boolean puedeDisparar(){
		return this.getArsenal().preparoArmaCargada();
	}

	
	public void setArsenal(Arsenal nuevoArsenal){
		arsenal = nuevoArsenal;
	}
		
}
